package com.visizen.wisdomclass.server.client;

import com.visizen.wisdomclass.server.model.WcCurrentClass;
import com.visizen.wisdomclass.server.model.WcCurrentClassExample;
import com.visizen.wisdomclass.server.model.WcCurrentClassExample.Criteria;
import com.visizen.wisdomclass.server.model.WcCurrentClassExample.Criterion;

import java.util.List;
import java.util.Map;

import static org.apache.ibatis.jdbc.SqlBuilder.*;

public class WcCurrentClassSqlProvider {

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	public String countByExample(WcCurrentClassExample example) {
		BEGIN();
		SELECT("count(*)");
		FROM("wc_current_class");
		applyWhere(example, false);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	public String deleteByExample(WcCurrentClassExample example) {
		BEGIN();
		DELETE_FROM("wc_current_class");
		applyWhere(example, false);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	public String insertSelective(WcCurrentClass record) {
		BEGIN();
		INSERT_INTO("wc_current_class");
		if (record.getUser_id() != null) {
			VALUES("user_id", "#{user_id,jdbcType=BIGINT}");
		}
		if (record.getOrganization_id() != null) {
			VALUES("organization_id", "#{organization_id,jdbcType=BIGINT}");
		}
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	public String selectByExample(WcCurrentClassExample example) {
		BEGIN();
		if (example != null && example.isDistinct()) {
			SELECT_DISTINCT("user_id");
		} else {
			SELECT("user_id");
		}
		SELECT("organization_id");
		FROM("wc_current_class");
		applyWhere(example, false);
		if (example != null && example.getOrderByClause() != null) {
			ORDER_BY(example.getOrderByClause());
		}
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	public String updateByExampleSelective(Map<String, Object> parameter) {
		WcCurrentClass record = (WcCurrentClass) parameter.get("record");
		WcCurrentClassExample example = (WcCurrentClassExample) parameter
				.get("example");
		BEGIN();
		UPDATE("wc_current_class");
		if (record.getUser_id() != null) {
			SET("user_id = #{record.user_id,jdbcType=BIGINT}");
		}
		if (record.getOrganization_id() != null) {
			SET("organization_id = #{record.organization_id,jdbcType=BIGINT}");
		}
		applyWhere(example, true);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	public String updateByExample(Map<String, Object> parameter) {
		BEGIN();
		UPDATE("wc_current_class");
		SET("user_id = #{record.user_id,jdbcType=BIGINT}");
		SET("organization_id = #{record.organization_id,jdbcType=BIGINT}");
		WcCurrentClassExample example = (WcCurrentClassExample) parameter
				.get("example");
		applyWhere(example, true);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	public String updateByPrimaryKeySelective(WcCurrentClass record) {
		BEGIN();
		UPDATE("wc_current_class");
		if (record.getOrganization_id() != null) {
			SET("organization_id = #{organization_id,jdbcType=BIGINT}");
		}
		WHERE("user_id = #{user_id,jdbcType=BIGINT}");
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_current_class
	 * @mbggenerated
	 */
	protected void applyWhere(WcCurrentClassExample example,boolean includeExamplePhrase){if (example == null){return;}String parmPhrase1;String parmPhrase1_th;String parmPhrase2;String parmPhrase2_th;String parmPhrase3;String parmPhrase3_th;if (includeExamplePhrase){parmPhrase1="%s #{example.oredCriteria[%d].allCriteria[%d].value}";parmPhrase1_th="%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";parmPhrase2="%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";parmPhrase2_th="%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";parmPhrase3="#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";parmPhrase3_th="#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";} else {parmPhrase1="%s #{oredCriteria[%d].allCriteria[%d].value}";parmPhrase1_th="%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";parmPhrase2="%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";parmPhrase2_th="%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";parmPhrase3="#{oredCriteria[%d].allCriteria[%d].value[%d]}";parmPhrase3_th="#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";}StringBuilder sb=new StringBuilder();List<Criteria> oredCriteria=example.getOredCriteria();boolean firstCriteria=true;for (int i=0;i < oredCriteria.size();i++){Criteria criteria=oredCriteria.get(i);if (criteria.isValid()){if (firstCriteria){firstCriteria=false;} else {sb.append(" or ");}sb.append('(');List<Criterion> criterions=criteria.getAllCriteria();boolean firstCriterion=true;for (int j=0;j < criterions.size();j++){Criterion criterion=criterions.get(j);if (firstCriterion){firstCriterion=false;} else {sb.append(" and ");}if (criterion.isNoValue()){sb.append(criterion.getCondition());} else if (criterion.isSingleValue()){if (criterion.getTypeHandler() == null){sb.append(String.format(parmPhrase1,criterion.getCondition(),i,j));} else {sb.append(String.format(parmPhrase1_th,criterion.getCondition(),i,j,criterion.getTypeHandler()));}} else if (criterion.isBetweenValue()){if (criterion.getTypeHandler() == null){sb.append(String.format(parmPhrase2,criterion.getCondition(),i,j,i,j));} else {sb.append(String.format(parmPhrase2_th,criterion.getCondition(),i,j,criterion.getTypeHandler(),i,j,criterion.getTypeHandler()));}} else if (criterion.isListValue()){sb.append(criterion.getCondition());sb.append(" (");List<?> listItems=(List<?>)criterion.getValue();boolean comma=false;for (int k=0;k < listItems.size();k++){if (comma){sb.append(", ");} else {comma=true;}if (criterion.getTypeHandler() == null){sb.append(String.format(parmPhrase3,i,j,k));} else {sb.append(String.format(parmPhrase3_th,i,j,k,criterion.getTypeHandler()));}}sb.append(')');}}sb.append(')');}}if (sb.length() > 0){WHERE(sb.toString());}}
}